package cn.rxyb.boot.redis;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Repository;

import java.util.*;

/**
 * @author YJH
 * @version 1.0
 * @description
 * @date 2020/7/2 15:27
 */
@Slf4j
@Repository
public abstract class BaseRedisUtils {

    @Autowired
    protected RedisTemplate redisTemplate;

    /**
     * 模糊匹配key
     *
     * @param matchKey 模糊字段
     * @return
     */
    public Optional<List> getMatchKeys(String matchKey) {
        Set keys = redisTemplate.keys(matchKey);
        if (null == keys && keys.size() == 0) {
            return Optional.empty();
        }
        Iterator iterator = keys.iterator();
        List<String> items = new LinkedList<>();
        while (iterator.hasNext()) {
            items.add(iterator.next().toString());
        }
        return Optional.of(items);
    }

    /**
     * 删除key
     *
     * @param key
     * @return 是否成功
     */
    public boolean del(String key) {
        if (redisTemplate.hasKey(key)) {
            return redisTemplate.delete(key);
        }
        log.warn("redis key [{}] 不存在", key);
        return false;
    }


    /**
     * 删除多个key
     *
     * @param collection 集合操作
     * @return 删除成功多少key
     */
    public long del(Collection collection) {
        return redisTemplate.delete(collection);
    }


    /**
     * key 是否存在
     *
     * @param key
     * @return
     */
    public boolean hasKey(String key) {
        return redisTemplate.hasKey(key);
    }


    /**
     * 修改key的名称
     *
     * @param oldKeyName 原 key
     * @param newKeyName 新 key
     */
    public void reKeyName(String oldKeyName, String newKeyName) {
        redisTemplate.rename(oldKeyName, newKeyName);
    }
}
